package Day_0223.NetWork;

/**
 * @author zxc
 * @date 2023/02/23 22:45
 **/
public class HTTPS {
    public static void main(String[] args) {
        /**
         * 谈一谈对于HTTPS协议的理解
         * ===》
         * 一.HTTPS ，实际就是在 TCP 层与 HTTP 层之间加入了 SSL/TLS 来为上层的安全保驾护航，
         * 主要用到对称加密、非对称加密、证书，等技术进行客户端与服务器的数据加密传输，最终达到保证整个通信的安全性。
         *
         * 二.HTTP协议和HTTPS协议之间的区别
         * ===》
         * https是安全版的http，因为http协议的数据都是明文进行传输的，
         * 所以对于一些敏感信息的传输就很不安全，HTTPS就是为了解决HTTP的不安全而生的。
         *
         * 三，对称加密和非对称加密
         * 1.对称加密 ：
         * （1）对称加密：即通信的双方都使用同一个秘钥进行加解密，比如特务接头的暗号，就属于对称加密
         * （2）对称加密虽然很简单性能也好，但是无法解决首次把秘钥发给对方的问题，很容易被hacker拦截秘钥。
         *
         * 2.非对称加密：
         * （1） 私钥 + 公钥= 密钥对
         * （2）即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密
         * （3）因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方
         * （4）然后对方再拿着这个公钥来加密数据响应给对方,等到到了对方那里,对方再用自己的私钥进行解密
         * ===》
         * （1）即，通信双方之间分别向对方发送自己的公钥，使得对方所传递的信息使用自己提供的公钥去进行加密，
         *  同时使用专属于自己的私钥 对于对方所发送的加密消息进行解密;
         * （2）非对称加密虽然安全性更高，但是带来的问题就是速度很慢，影响性能。
         *
         * 四，HTTPS是如何保证安全的
         * 1.使用对称加密，来对于所要传递的消息进行加密;
         * 2.为了防止对称加密的密钥被人盗取/篡改，使用非对称加密 对于对称加密的密钥进行传输;
         * 3.发送方将使用非对称加密的公钥 对于对称加密的公钥进行加密传输，同时接收方使用非对称加密的私钥对其进行解密，获取对称加密的公钥;
         * 4.此时又带来一个问题，中间人问题：
         * （1）如果此时在客户端和服务器之间存在一个中间人,
         *  这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。
         * （2）所以这个时候需要一个安全的第三方颁发证书（CA），证明身份的身份，防止被中间人攻击。
         *  证书中包括：签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等
         * ===》
         * 选择使用安全的第三方证书CA，来避免发生中间人不安全问题;
         * 5.使用数字签名，来保证 证书在数据传输的过程中，未被他人进行修改;
         * （1）首先，发送方使用CA所提供的hash算法对于证书内容进行摘要，再使用CA私钥加密，形成数字签名;
         * （2）然后，接收方也对于所接收到的证书使用相同的hash算法进行内容摘要 && 同时使用CA所提供的公钥，对于数字签名进行解密
         * （3）最后，将上述两者的内容进行比较，若是相同的话，则代表证书在传输过程中未被人修改
         * ===》从而最大程度上地，保证了数据传输的安全性;
         *
         *
         */
    }
}
